package com.atguigu.common.exception;

import lombok.Getter;

/**
 * 错误码与错误信息定义类
 * 1. 错误码定义规则 为 5位数字
 * 2. 前两位表示业务场景，最后三位表示错误码。例如 10001。10:通用、001:系统未知异常
 * 10:通用
 * 001:通用格式校验
 * 002:验证码获取频次过高
 * 11:商品
 * 12:订单
 * 13:购物车
 * 14:物流
 * 15:会员
 * 21:库存
 * 22:秒杀
 *
 */
@Getter
public enum BizErrorCode {
    SUCCESS(0, "Success"),

    VALID_ERROR(10001, "参数校验错误"),
    SMS_IN_HIGH_FREQUENCY_ERROR(10002, "验证码获取频次过高"),
    INVALID_INPUT(10003, "Invalid input"),
    NOT_FOUND(10004, "Not found"),
    PERMISSION_DENIED(10005, "Permission denied"),
    TO_MANY_REQUEST_ERROR(10005, "请求数太多"),
    SENTINEL_FALLBACK_ERROR(10005, "FALLBACK"),

    PRODUCT_UP_ERROR(11001, "商品上架错误"),
    ORDER_PARITY_ERROR(12001, "订单比价失败"),
    ORDER_TOKEN_VALID_ERROR(12003, "订单token校验失败"),

    USERNAME_EXIST_ERROR(15001, "用户已存在"),
    PHONE_EXIST_ERROR(15002, "手机号码已被注册"),
    ACCT_NO_OR_PASSWORD_ERROR(15003, "用户名/密码错误"),

    NO_ENOUGH_STOCK_ERROR(21001, "没有足够的商品库存错误"),

    NO_IN_CURRENT_PERIOD_ERROR(22001, "此商品不在当前秒杀时段"),
    INCORRECT_VERITY_CODE_ERROR(22002, "秒杀商品校验码错误"),
    SOLD_OUT_ERROR(22003, "秒杀商品已售完"),
    REACHED_LIMIT_NUMBER_ERROR(22004, "商品购买量达到限制"),
    REACHED_LIMIT_TIMES_ERROR(22005, "商品购买次数达到限制"),
    NOT_EXIST_PRODUCT_ERROR(22006, "秒杀商品信息不存在"),
    INCORRECT_SESSION_PRODUCT_ERROR(22007, "秒杀商品场次信息错误"),
    TOO_SLOW_ERROR(22008, "手滑了没抢到错误"),

    INTERNAL_ERROR(50001, "Internal server error");


    private final int code;
    private final String message;

    BizErrorCode(int code, String message) {
        this.code = code;
        this.message = message;
    }

}
